package com.atguigu.gmall_logger.control;

/**
 * @ClassName: logcontroler
 * @Description:
 * @Author: kele
 * @Date: 2021/3/16 19:36
 **/


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.atguigu.gmall.utils.Constant.KafkaConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 该controler的作用是   1、将web界面收到的数据发送到kafka，
 *                     2、将数据保存到本地磁盘
 */
//以文本的方式返回
@RestController
@Slf4j  //该注解直接可以生成一个log
        //相当于：Logger log = LoggerFactory.getLogger(logcontroler.class);
public class logcontroler {

    //自动生成一个kafka对象
    @Autowired
    private KafkaTemplate<String,String> kafkaTemplate;

    @RequestMapping(value = "/log")
    public Object handler(String logString){

        //生成一个log
        //Logger log = LoggerFactory.getLogger(logcontroler.class);


        //生成的日志数据没有时间戳，需要在日志服务器上添加时间戳
        JSONObject jsonObject = JSON.parseObject(logString);

        jsonObject.put("ts", System.currentTimeMillis());

        String finaldata = jsonObject.toString();

        if("startup".equals(jsonObject.getString("type")) ){
//            启动日志和事件日志使用不同的topic进行传输
            kafkaTemplate.send(KafkaConstant.KAFKA_TOPIC_STARTUP,finaldata);
        }else{
            kafkaTemplate.send(KafkaConstant.KAFKA_TOPIC_EVENT,finaldata);
        }

        //记录logger并且落盘
        log.info(finaldata);

        return null;
    }

}
